alloc.n=function(data,g,Ni,s2i,cost,fcost,type,param,B){ data=as.name(data); type=as.name(type); g=g; s2i=s2i stratname=levels(g); Ni=Ni; N=sum(Ni); si=sqrt(s2i) cost=cost; param=as.name(param); B=B; fcost=fcost if(param=='mean'){ D=B^2/4 } else if(param=='proportion'){ D=B^2/4 } else if(param=='total') D=B^2/(4*N^2) if(type=='optimal'){ ai=(Ni*si/sqrt(cost))/(sum(Ni*si/sqrt(cost))) n=ceiling((sum(Ni*si/sqrt(cost))*(sum(Ni*si*sqrt(cost))))/(N^2*D+sum(Ni*s2i))) ni=round(n*ai,0) } else if(type=='fixed'){ ai=(Ni*si/sqrt(cost))/(sum(Ni*si/sqrt(cost))) n=floor(fcost/sum(cost*ai)) ni=round(n*ai,0) } else if(type=='Neyman'){ ai=(Ni*si)/sum(Ni*si) n=ceiling((sum(Ni*si))^2/(N^2*D+sum(Ni*s2i))) ni=round(n*ai,0) } else if(type=='proportional'){ ai=Ni/N n=ceiling(sum(Ni*s2i)/(N*D+(1/N)*sum(Ni*s2i))) ni=round(n*ai,0) } cat('','\n','Results from StRS method: ',param,'\n','Data: ',data,'\n', 'Allocation method: ' ,type,'\n', 'Population size =',N,'\n','Stratum =',stratname,'\n','Stratum sizes =',Ni,'\n', 'Estimated variances =',s2i,'\n','Desired bound =',B,'\n','Allocation fractions (ai) =', ai,'\n','Estimated sample size =',n,'\n','Estimated stratum sample sizes =',ni,'\n','Note: there may be some discrepancies in sample sizes due to rounding errors','\n') results=list(type=type,data=data,N=N,Ni=Ni,stratname=stratname,ai=ai,param=param,n=n,ni=ni,B=B,fcost=fcost) } # to use the function with its call: alloc.n(data,g,Ni,s2i,cost,fcost,type,param,B) # data: name of dataset, in quotes # g: vector of stratum # Ni: vector of population sizes # s2i: vector of stratum variances (for proportions, s2i=pi*qi) # cost: vector of stratum survey costs (if none, input a vector of 1s) # fcost: (total) fixed cost (if none, use 1) # type: c('optimal','fixed','Neyman','proportional') # param: c('mean','total','proportion') # B: desired bound